package edu.northwestern.cbits.purple_robot_manager.tests; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import junit.framework.Assert; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.util.Log; import edu.emory.mathcs.backport.java.util.Collections; import edu.northwestern.cbits.purple_robot_manager.R; import edu.northwestern.cbits.purple_robot_manager.logging.LogManager; import edu.northwestern.cbits.purple_robot_manager.probes.Probe; import edu.northwestern.cbits.purple_robot_manager.probes.ProbeManager; import edu.northwestern.cbits.purple_robot_manager.scripting.BaseScriptEngine; public class JavascriptProbeSettingsTest extends RobotTestCase { public JavascriptProbeSettingsTest(Context context, int priority) { super(context, priority); } @Override public void test() { if (this.isSelected(this._context) == false) return; HashMap<String, JSONObject> probeDefs = new HashMap<>(); for (Probe probe : ProbeManager.allProbes(this._context)) { JSONObject settings = probe.fetchSettings(this._context); if (settings != null) probeDefs.put(probe.name(this._context), settings); } try { ArrayList<String> names = new ArrayList<>(); for (String name : probeDefs.keySet()) { names.add(name); } Collections.sort(names); for (int j = 0; j < names.size(); j++) { String name = names.get(j); Probe probe = ProbeManager.probeForName(name, this._context); if (probe != null) { this.broadcastUpdate("Testing " + probe.title(this._context) + " (" + (j + 1) + "/" + names.size() + ")..."); JSONObject settings = probeDefs.get(name); Iterator<String> keys = settings.keys(); while (keys.hasNext()) { String key = keys.next(); JSONObject value = settings.getJSONObject(key); JSONArray options = value.getJSONArray(Probe.PROBE_VALUES); for (int i = 0; i < options.length(); i++) { Object option = options.get(i); Log.e("PR", "TESTING JSPSX-" + probe.shortName(this._context) + "-" + key + "-" + option); JSONObject payload = new JSONObject(); payload.put(Probe.PROBE_NAME, name); payload.put(key, option); Object returned = BaseScriptEngine.runScript(this._context, "PurpleRobot.updateProbe(" + payload.toString().replace("\"", "'") + ");"); Assert.assertEquals("JSPS0-" + probe.shortName(this._context) + "-" + key + "-" + option, returned.getClass(), Boolean.class); Assert.assertTrue("JSPS1-" + probe.shortName(this._context) + "-" + key + "-" + option, ((Boolean) returned).booleanValue()); Thread.sleep(1000); Map<String, Object> config = probe.configuration(this._context); Assert.assertEquals("JSPS2-" + probe.shortName(this._context) + "-" + key + "-" + option, option, config.get(key)); Thread.sleep(1000); } } } else Assert.fail("JSPS 9000: " + name); } } catch (JSONException | InterruptedException e) { LogManager.getInstance(this._context).logException(e); } } @Override public int estimatedMinutes() { HashMap<String, JSONObject> probeDefs = new HashMap<>(); for (Probe probe : ProbeManager.allProbes(this._context)) { JSONObject settings = probe.fetchSettings(this._context); if (settings != null) probeDefs.put(probe.name(this._context), settings); } return probeDefs.keySet().size() / 2; } @Override public String name(Context context) { return context.getString(R.string.name_javascript_probe_config_test); } }